# from django.conf import settings
# from django.core.files.storage import Storage
# from django.utils.deconstruct import deconstructible
# from fdfs_client.client import Fdfs_client
#
# """
# 自定义存储类的格式:
#     1 定义类继承自Storage
#     2 重写init方法,实现变量能够被初始化
#     3 重写open,save,exists,url
# """
# @deconstructible
# class MyStorage(Storage):
#     def __init__(self, base_url=None):
#         if not base_url:
#             base_url = settings.BASE_URL
#         self.base_url = base_url
#
#     def open(self, name, mode='rb'):
#         # 当打开一张图片的时候会调用该方法
#
#         pass
#
#     def save(self, name, content, max_length=None):
#         # 当存储图片的时候调用该方法
#         # 创建对象
#         client = Fdfs_client('utils/fdfs/client.conf')
#         # 上传
#         result = client.upload_by_buffer(content.read())  # upload_by_buffer 将图片读取成二进制然后缓冲上传
#         # 判断是否成功
#         if result["Status"] == "Upload successed.":
#             return result["Remote file_id"]
#         else:
#             raise Exception("图片上传失败")
#
#     def exists(self, name):
#         # 当存储的时候判断图片是否存在的
#
#         return False
#
#     def url(self, name):
#         # 当访问图片的时候返回的图片地址
#
#         return self.base_url + name  # 自定义前缀加上图片路径 = 图片地址
from django.conf import settings
from django.core.files.storage import Storage
from django.utils.deconstruct import deconstructible
from fdfs_client.client import Fdfs_client
"""
自定义存储类的格式:
1, 定义类继承自Storage
2, 重写init方法,保证变量能够被初始化
3, 重写open,save,exists,url
"""
@deconstructible
class MyStorage(Storage):
    def __init__(self, base_url=None):
        if not base_url:
            base_url = settings.BASE_URL
        self.base_url = base_url

    def open(self, name, mode='rb'):
        """当去打开一张图片的时候会调用该方法"""
        pass

    def save(self, name, content, max_length=None):
        """
        :param name: 图片名字
        :param content: 图片内容
        :param max_length: 最大的上传量
        :return:
        """
        """当去存储图片的时候调用该方法"""
        #1,创建对象
        client = Fdfs_client('utils/fdfs/client.conf')

        #2,上传
        result = client.upload_by_buffer(content.read())

        #3,判断图片是否上传成功
        if result["Status"] == "Upload successed.":
            return result["Remote file_id"]
        else:
            raise Exception("图片上传失败")

    def exists(self, name):
        """存储的时候判断图片是否存在的"""
        return False

    def url(self, name):
        """当访问图片的时候返回的图片地址"""
        return self.base_url + name